import { ActorActionManager } from "../../manager/ActorActionManager";
import {Effect} from "../IEffectContainer";

/**
 * 冰冻效果类，继承自Effect基类
 * 用于实现游戏中的冰冻效果，可以降低目标移动速度并在一定时间后解除
 */
export class bingdong extends Effect {
    //日志控制器，用于记录冰冻效果的日志信息
    logLevel = "bingdong"

    /**
     * 应用冰冻效果到目标
     * @param target - 目标角色的动作管理器
     */
    apply(target: ActorActionManager) {
        // 调用父类的apply方法
        super.apply(target)
        // 在控制台输出冰冻持续时间的日志
        console.log("冰冻时长",this.duration[this.level-1])
        // 减少目标的线性移动速度，减少量为当前等级对应的数值
        target.linearSpeed-=this.num[this.level-1]
        // 设置定时器，在指定时间后移除冰冻效果
        // 注意：这里额外增加了1秒的延迟
        this.timerId = setTimeout(() => {
            this.remove(target)
        }, this.duration[this.level-1]+1000)
    }

    /**
     * 移除冰冻效果
     * @param target - 目标角色的动作管理器
     */
    remove(target: ActorActionManager) {
        // 记录提前终止的日志
        this.log.log(this.logLevel, `提前终止`)
        // 查找目标身上的冰冻效果buff
        let buff =target.buffs.find(b => b.effect.id == this.id);
        // 恢复目标的原始线性移动速度
        target.linearSpeed=target.data.linearSpeed
        // 如果buff存在且设置了定时器ID，则移除该buff
        if(buff.timerId!=null){
            target.removeBuff(buff.effect.id)
        }
    }
}
